package br.com.consignum.modelo.grupousuario;

import java.util.List;

import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.FetchType;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne;
import javax.persistence.SequenceGenerator;
import javax.persistence.Table;
import javax.persistence.Transient;

import br.com.consignum.annotations.FiltroConsulta;
import br.com.consignum.annotations.RelacionamentoValido;
import br.com.consignum.modelo.grupo.GrupoVO;
import br.com.consignum.modelo.usuario.UsuarioVO;
import br.com.consignum.modelo.util.EntidadeVO;

/**
 * The persistent class for the catb07_grupo_usuario database table.
 */
@Entity
@Table( name = "catb07_grupo_usuario", schema = "controle_acesso" )
public class GrupoUsuarioVO extends EntidadeVO {

	private static final long serialVersionUID = 1L;

	@RelacionamentoValido( nomeAmigavel = "Grupo" )
	@FiltroConsulta( name = "grupo.nome", nameAttributeInVO = "nome" )
	@ManyToOne( fetch = FetchType.EAGER )
	@JoinColumn( name = "id_grupo" )
	private GrupoVO grupo;

	@Id
	@SequenceGenerator( name = "CATB07_GRUPO_USUARIO_IDGRUPOUSUARIO_GENERATOR", sequenceName = "SEQC_GRUPO_USUARIO", schema = "controle_acesso", allocationSize = 0 )
	@GeneratedValue( strategy = GenerationType.SEQUENCE, generator = "CATB07_GRUPO_USUARIO_IDGRUPOUSUARIO_GENERATOR" )
	@Column( name = "id_grupo_usuario" )
	private Long id;

	@FiltroConsulta( name = "usuario.nome" , nameAttributeInVO = "nome" )
	@ManyToOne( fetch = FetchType.EAGER )
	@JoinColumn( name = "id_usuario" )
	private UsuarioVO usuario;

	@Transient
	private List<UsuarioVO> usuarios;
	
	public List<UsuarioVO> getUsuarios() {
		return usuarios;
	}

	
	public void setUsuarios( List<UsuarioVO> usuarios ) {
		this.usuarios = usuarios;
	}

	@Override
	public boolean equals( Object obj ) {
		if ( this == obj )
			return true;
		if ( obj == null )
			return false;
		if ( getClass() != obj.getClass() )
			return false;
		GrupoUsuarioVO other = (GrupoUsuarioVO) obj;
		if ( grupo == null ) {
			if ( other.grupo != null )
				return false;
		} else if ( !grupo.equals( other.grupo ) )
			return false;
		if ( id == null ) {
			if ( other.id != null )
				return false;
		} else if ( !id.equals( other.id ) )
			return false;
		if ( usuario == null ) {
			if ( other.usuario != null )
				return false;
		} else if ( !usuario.equals( other.usuario ) )
			return false;
		return true;
	}

	public GrupoVO getGrupo() {
		if( grupo == null){
			return new GrupoVO();
		}
		return grupo;
	}

	public Long getId() {
		return id;
	}

	public UsuarioVO getUsuario() {
		if( usuario == null){
			return new UsuarioVO();
		}
		return usuario;
	}

	@Override
	public int hashCode() {
		final int prime = 31;
		int result = 1;
		result = prime * result + ( ( grupo == null ) ? 0 : grupo.hashCode() );
		result = prime * result + ( ( id == null ) ? 0 : id.hashCode() );
		result = prime * result + ( ( usuario == null ) ? 0 : usuario.hashCode() );
		return result;
	}

	public void setGrupo( GrupoVO grupo ) {
		this.grupo = grupo;
	}

	public void setId( Long id ) {
		this.id = id;
	}

	public void setUsuario( UsuarioVO usuario ) {
		this.usuario = usuario;
	}

}